/*
 * @lc app=leetcode.cn id=714 lang=javascript
 *
 * [714] 买卖股票的最佳时机含手续费
 */

// @lc code=start
/**
 * @param {number[]} prices
 * @param {number} fee
 * @return {number}
 */
var maxProfit = function (prices, fee) {
  // - 状态：定义dp[i][0|1]为【第i个天的最大利润 0代表持有股票 1代表不持有】
  // - 初始状态： dp[0][0] = 0; dp[0][1] = -prices[0] - fee;
  // - 状态转移：dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + price - fee); dp[i][1] = Math.max(dp[i - 1][0] - prices[i], dp[i - 1][1]);
  // - 答案：Math.max(dp[n - 1][1], dp[n - 1][0]);
  const n = prices.length;
  const dp = new Array(n).fill(0).map((v) => new Array(2).fill(0));
  dp[0][0] = 0;
  dp[0][1] = -prices[0];
  for (let i = 1; i < prices.length; i++) {
    const price = prices[i];
    dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] + price - fee);
    dp[i][1] = Math.max(dp[i - 1][0] - prices[i], dp[i - 1][1]);
  }
  return Math.max(dp[n - 1][1], dp[n - 1][0]);
};
// @lc code=end
